//
//  main.m
//  Oc03_属性
//
//  Created by dllo on 16/2/26.
//  Copyright © 2016年 Apon. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Person.h"
#import "Fraction.h"
int main(int argc, const char * argv[]) {
#if 0
#pragma mark - 知识点1. 属性
    /** 
     * 属性实现了三个功能:1.声明了一个实例变量.
                       2.声明了setter gettter 方法
                       3.实现了setter getter 方法
     *
     * 详见person类
     */
    //创建对象
    Person *per = [Person person];
    
    //实例变量赋值
    [per setName:@"tom"];
    [per setSex:@"male"];
    [per setAge:10];
    
    //取值
    NSLog(@"name: %@ sex:%@ age: %ld",[per name],[per sex],[per age]);
#endif

#pragma mark - 知识点2. 属性的特性
 /** 
  * 属性的特性有三个: 读写性, 原子性, 语义设置
  * 属性的特性的目的, 控制setter, getter方法实现的细节.
  * 
  * 读写性特性的选项: readonly readwrite setter= getter=.
  * 默认是readwrite 常用是readwrite
  *
  * 原子性特性的选项 : atomic, nonatomic
    默认是atomic 常用的是nonatomic 
  
  * 语义设置个性的选项: assign retain copy 
    默认是assign 
    非对象类型使用assign (int,nsinteger)
    对象类型(nsstring )使用retain
    对象类型并且向获取副本 使用copy
  * 详见Person.h文件
  */
    
    
    
    
    
#pragma mark - 知识点3. 点语法
/** 
 * 点语法只适用于setter,getter语法
 */
    //创建对象
    Person *per = [Person person];
    
    per.name = @"ton";
    per.age = 10;
    per.sex = @"male";
    
    NSLog(@"name: %@, age: %ld, sex: %@", per.name, per.age, per.sex);
    
    Person *per2 = [Person person];
    per2.name = per.name;

    
#pragma mark - 综合练习(分数)
    /**
     * 创建一个Fraction类(分数)实现分数的加减乘除, ⽐较⼤小、约分等方法。
     * 提示：
     * 1.声明属性 numerator(分子)、denominator(分母)。
     * 2.声明自定义初始化方法、遍历构造器，用于给分子分母赋值。
     * 3.声明功能方法
     */
    
    //创建分数对象
    //Fraction *frac1 = [Fraction fractionWithNumberator:37 denominator:64];
    Fraction *frac1 = [[Fraction alloc]initWithNumberator:8 denominator:16];
    Fraction *frac2 = [Fraction fractionWithNumberator:1 denominator:2];
#if 0
    //调用+方法
    Fraction *frac3 = [frac1 plusWithFraction:frac2];
    //NSLog(@"sum: %@",frac3);
    NSLog(@"sum = %ld/%ld",frac3.numberator, frac3.denominator);
    //调用-
    Fraction *frac4 = [frac1 minusWithFraction:frac2];
    NSLog(@"jian = %ld/%ld",frac4.numberator, frac4.denominator);
    
    // *
    Fraction *frac5 = [frac1 mulWithFraction:frac2];
    NSLog(@"mul = %ld/%ld",frac5.numberator, frac5.denominator);
    
    // ➗
    Fraction *frac6 = [frac1 devidWithFraction:frac2];
    NSLog(@"dev = %ld/%ld",frac6.numberator, frac6.denominator);
   
#endif
    //比较大小
    Fraction *frac0 = [frac1 compareWithFraction:frac2];
    NSLog(@"con = %ld / %ld",frac0.numberator, frac0.denominator);
    
    //约分
    Fraction *frac3 = [frac1 yueWithFraction];
    NSLog(@"yue = %ld/ %ld", frac3.numberator, frac3.denominator);
    
    
    
    
    
    return 0;
}
